import { useCallback } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { setStore } from '@/reducers/common';

/**
 * 用于处理需要登录才能执行的操作的Hook
 * @returns {Function} withAuth - 包装函数，用于包装需要登录的操作
 */
const useAuthAction = () => {
    const dispatch = useDispatch();
    const { userInfo = {} } = useSelector(s => s.common);
    const isLoggedIn = !!userInfo?.id;

    /**
     * 包装需要登录的操作
     * @param {Function} action - 需要执行的操作函数
     * @returns {Function} 包装后的函数
     */
    const withAuth = useCallback((action) => {
        return async (...args) => {
            if (!isLoggedIn) {
                // 显示登录弹框
                dispatch(setStore({ loginVisible: true }));
                return false; // 返回false表示操作未执行
            }
            
            // 已登录，执行原操作
            try {
                const result = await action(...args);
                return result;
            } catch (error) {
                console.error('操作执行失败:', error);
                throw error;
            }
        };
    }, [isLoggedIn, dispatch]);

    return withAuth;
};

export default useAuthAction;